A common software construct includes a client in one protection domain invoking a service that is implemented, entirely or partially, in another protection domain. A protection domain is the set of data directly accessible by a given client or service. One common method for implementing a protection domain is to use address spaces, provided by many microprocessors. A common example of cross-domain service invocation is a thread in a user level process calling a service implemented in an operating system kernel. Another example is a thread in one process calling a service implemented in a separate process, possibly on a different machine.
In the case where the client and the service reside in different protection domains, the service may not be able to directly access the data on which the client requires it to operate. Existing methods for cross-domain service invocation, therefore, typically combine the invocation with the transfer of data between the client and service protection domains. The combination of data transfer with the service invocation is inefficient in the case where multiple service invocations are performed with the same or similar data. For example, in many operating systems sending the same data to multiple destinations entails invoking a communication service multiple times. Each time the communication service is invoked, the same data to be sent is copied from the client address space to the kernel address space, resulting in unnecessary utilization of resources.
It is desirable, therefore, and an object of the present invention, to provide a method for calling a service which improves efficiency.
It is another object of the invention to provide a method for calling a service by separating data transfer from operation invocation.